home *** CD-ROM | disk | FTP | other *** search
- ;Name: Version
-
- ;versucht die Version von einem residenten Modul oder Prog.File zu ermitteln
- ;endstanden, da c:version nur unzureichend oder falsche werte ausgab
- ;22.04.93 bemerkung zu version-Befehl-2.0 , ermittelt die version, indem das Prog.
- ; die Versions-ID sucht, und von dort die werte nimmt. Bei librarys geht das
- ; Betriebssytem aber anders vor, so daß unterschiede vorhanden sind.
- ; Vers. setzt bei Libs/Devs/l/local $4afc und ... voraus, siehe lib.struct
- ; Prog. "$VER: " voraus.
- ; der String muß dann folgendermaßen aussehen, sonst fehler: "name Vers.Revis "
-
-
-
- ;History:
- ;begonnen am, Datum: 20.03.93
- ;20.04.93 Versionsbefehl von OS2.1 gedebugt, daraus ergaben sich diverse änderungen
- ; meines Programms. (V2.00)
- ;30.04.93 teste auf falsche offsets, da sonst Adresserror bei falschen werten
-
-
-
- my_version macro
- dc.b "2.01"
- endm
- my_Date macro
- dc.b "(30.03.93)"
- endm
-
-
- *----------------------------------------------------------------------------------*
-
- ;fest verwendete Register:
- ;A4=Prog. anfang, Code
- ;A5=eigener Stack
- ;A6=Dosbase/execbase
- ;A7=Stack
- ;d4=file len min
- ;d5=file len max
- ;d6=returncode (nur am prog.ende)
-
-
-
- ;Verwendete Offsets und Variablen über (a5)
-
- Link_Felder equ 23 ;anzahl der benötigten felder eingeben
-
- link_size equ Link_felder*-4 ;Felder *4 in bytes, aber negativ
- rsset link_size
-
- execbase rs.l 1
- dosbase rs.l 1
- input rs.l 1
- output rs.l 1
-
- Arg_Base rs.l 1
- Arg_NAME rs.l 1
- Arg_VERSION rs.l 1
- Arg_REVISION rs.l 1
- Arg_UNIT rs.l 1
- Arg_FILE rs.l 1
- Arg_INTERNAL rs.l 1
- Arg_RES rs.l 1
- Arg_FULL rs.l 1
- Arg_HELP rs.l 1
-
- File_len rs.l 1
- Mem_read_base rs.l 1 ;*mem
- Mem_buffer_base rs.l 1
- file_name rs.l 1 ;*
- File_version rs.l 1
- file_revision rs.l 1
- file_typ rs.l 1 ;09, 08, ..
- file_found rs.l 1
- File_ID rs.l 1 ;*
-
- link_ rs.l 1 ;der letzte erlaubte wert ist -4
- ifgt link_ ;ist >0
- fail Link Feld ist zu klein dimensioniert
- endc
-
-
-
- mem_buffer_len equ 1024
-
- ;Flaggs
-
-
-
- incdir include:
- include lvo/exec.i
- include lvo/dos.i
- include main/call_link.i
-
-
-
- Programm link a5,#link_size
- movem.l d2-d7/a2-a3/a6,-(a7)
- moveq #0,d1
- moveq #~Link_size/4,d2
- move.l a5,a1
- .next move.l d1,-(a1)
- dbf d2,.next
- moveq #20,d6 ;returned ..
-
- moveq #0,d0
- lea dosname(pc),a1
- callexec _LVOopenlibrary,execbase
- move.l d0,dosbase(a5)
- beq no_Dos
- move.l d0,a6
- cmpi.w #$25,$14(a6)
- bcs NoKS20 ;ned KS 2.0
-
- Usage lea usage_txt(pc),a1
- move.l a1,d1
- lea arg_name(a5),a0 ;zeiger auf den arg-buffer
- move.l a0,d2
- moveq #0,d3 ;??
- calldos -$31e ;Arg auswertung
- move.l d0,arg_base(a5)
- beq dos_error
-
- output_ calldos _LVOoutput
- move.l d0,output(a5)
- beq Prog_end
-
- tst.l Arg_HELP(a5)
- bmi help
-
- move.l #mem_buffer_Len,d0
- moveq #1,d1
- callexec _LVOallocmem,execbase
- move.l d0,Mem_buffer_base(a5)
- beq no_Mem
-
- include quell:version_tst.asm
-
-
- *-------Progr.-Ende----------------------------------------------------------------*
-
- ;D6=Returncode
-
-
- NoKS20 lea open_CLI(pc),a0
- move.l a0,d1
- move.l #1006,d2
- calldos _LVOOpen
- move.l d0,d5
- beq.s .next ;noopen
- move.l d5,d1
- lea NoKS20_txt(pc),a0
- move.l a0,d2
- moveq #NoKS20_txt_len,d3
- calldos _LVOWrite
- move.l d5,d1
- calldos _LVOClose
- .next bra closedos
-
-
- Dos_error calldos _LVOIOErr,dosbase
- move.l d0,d1
- beq.s .next
- moveq #0,d2 ;??
- calldos -$1da ;Errortext ins shell ausgeben
- .next moveq #10,d6
- bra Prog_end_1
-
-
- help lea Help_txt(pc),a1
- pea Prog_end(pc)
- bra write
-
-
- no_mem lea no_mem_txt(pc),a1
- pea Prog_end_1(pc)
- moveq #99,d6
- bra write
-
-
- fail_end move.l a0,d1 ;UniRoutione a0=aufzuarbeitender Text
- lea arg_name(a5),a0
- move.l a0,d2
- calldos -$3ba,dosbase
- moveq #10,d6 ;returned
- bra Prog_end_1
-
-
- *-------------------------------------------------------
-
- Prog_end moveq #0,d6
- Prog_end_1
-
- move.l Mem_buffer_base(a5),a1
- move.l a1,d0 ; nur zum testen
- beq.s mem
- move.l #mem_buffer_len,d0
- callexec _LVOfreemem,execbase
-
- mem move.l mem_read_base(a5),a1
- move.l a1,d0 ; nur zum testen
- beq.s .next
- move.l File_len(a5),d0
- callexec _LVOfreemem,execbase
-
- .next move.l arg_base(a5),d1
- beq.s closeDos
- calldos -$35a,dosbase ;free Struct
-
- closedos move.l dosbase(a5),a1
- callexec _LVOcloselibrary,execbase
-
- no_dos move.l d6,d0 ;Prog. returned ??
- movem.l (a7)+,d2-d7/a2-a3/a6
- unlk a5
- rts
-
-
- ;------------------Unterprogramme----Teil--1-------------------------------------
-
-
- include include:main/hextodez.asm
-
- write moveq #0,d3
- move.w (a1)+,d3
- move.l a1,d2
- move.l output(a5),d1
- calldos _LVOwrite,dosbase
- rts
-
-
- *------------------Variablen Felder -----------------------------------------------*
-
-
- dc.b "$VER: Version "
- MY_version
- dc.b " "
- MY_date
- dc.b 0
- even
-
-
- dosname dc.b "dos.library",0
- even
-
- versname dc.b "version.library",0
- even
-
- open_cli dc.b "*",0
- even
-
- libs_path dc.b "LIBS:",0
- even
-
- locale_Path dc.b "LOCALE:Languages/",0
- even
-
- devs_path dc.b "DEVS:",0
- even
-
- l_path dc.b "L:",0
- even
-
- DDevice_path dc.b ":",0
- even
-
- Var_WB dc.b "Workbench",0
- even
-
- Var_KS dc.b "Kickstart",0
- even
-
- KS_Vers_txt dc.b "Kickstart version %ld.%ld",0
- even
-
- WB_Vers_txt dc.b ", Workbench version %ld.%ld",0
- even
-
- String_Rest dc.b 10,0
- even
-
- einfach_txt dc.b "%s %ld.%ld",10,0
- even
-
- Full_txt dc.b "%s %ld.%ld Typ: %s, Found: %s",10," %s",10,0
- even
-
-
- Usage_txt dc.b "NAME,VERSION/N,REVISION/N,UNIT/N,FILE/S,INTERNAL/S,RES/S,"
- dc.b "FULL/S,HELP/S",0
- even
-
- Help_txt dc.w Help_txt_len
- dc.b "programmed by Lutz Hanke, in Assembler.",10
- dc.b "This Programm it Shareware",10
- dc.b "Print formated: name version.revision Objecttyp",10
- dc.b " Text_info",10,0
- Help_txt_len equ *-Help_txt-3
- even
-
-
- NO_vers_txt dc.b "'%s' has not version information",10,0
- even
-
- No_Prog_txt dc.b "'%s' - File is not Programm",10,0
- even
-
- Fail_Hunk_txt dc.b "'%s' has a Hunk error",10,0
- even
-
- Fail_Structure_txt dc.b "'%s' Structure failture",10,0
- even
-
- NoKS20_txt dc.b "Need Kickstart version 2.04 or greater.",10,0
- NoKS20_txt_len equ *-NoKS20_txt-1
- even
-
- no_mem_txt dc.w no_mem_txt_len
- dc.b "*** Break, No More for Mem",10,0
- no_mem_txt_len equ *-no_mem_txt-3
- even
-
-
- intern dc.b "Intern",0,0
- extern dc.b "Extern",0,0
-
- Typ_table dc.w .next_0-Typ_table
- dc.w .next_1-Typ_table
- dc.w .next_2-Typ_table
- dc.w .next_3-Typ_table
- dc.w .next_4-Typ_table
- dc.w .next_5-Typ_table
- dc.w .next_6-Typ_table
- dc.w .next_7-Typ_table
- dc.w .next_8-Typ_table
- dc.w .next_9-Typ_table
- dc.w .next_10-Typ_table
- dc.w .next_11-Typ_table
- dc.w .next_12-Typ_table
- dc.w .next_13-Typ_table
- dc.w .next_14-Typ_table
- dc.w .next_15-Typ_table
- dc.w .next_16-Typ_table
- dc.w .next_17-Typ_table
- dc.w .next_18-Typ_table
-
- .next_0 dc.b "Unknown/User",0
- .next_1 dc.b "Task",0
- .next_2 dc.b "Interrupt",0
- .next_3 dc.b "Device",0
- .next_4 dc.b "Msgport",0
- .next_5 dc.b "Message",0
- .next_6 dc.b "Freemsg",0
- .next_7 dc.b "Replymsg",0
- .next_8 dc.b "Resource",0
- .next_9 dc.b "Library",0
- .next_10 dc.b "Memory",0
- .next_11 dc.b "Softint",0
- .next_12 dc.b "Font",0
- .next_13 dc.b "Process",0
- .next_14 dc.b "Semaphore",0
- .next_15 dc.b "Signalsem",0
- .next_16 dc.b "Bootnode",0
- .next_17 dc.b "Install-Hand",0
- .next_18 dc.b "File (Vers=ID)",0
-
-
- end
-
-
-